<?php
class AccessManager extends DooController
{

  /**
   *
   * Tableau associatif des droits d'accès qui contient
   * nom du module => URL d'accès
   * Le nom du module est le nom/clef à afficher dans l'application
   * L'URL d'accès est de la forme module/controller/method
   * @var tableau associatif nom_module => URL d'accès
   */
  private $access;

  /**
   *
   * ID de l'utilisateur
   * @var int
   */
  private $user;


  /**
   *
   * Initialise une variable de session qui contient les droits d'accès
   * Les droits d'accès sont en base de données. Un utilisateur a accès ou à un module
   * Les droits d'accès sont chargés lors de la connexion de l'utilisateur.
   * PENSER à se deconnecter lors des modifications
   * La Variable de sessions $_SESSION['id'] doit être initialisée pour récupérer les droits d'accès
   */
  public function __construct($user_id) {
    $this->user = $user_id;
    //On vérifie si il n'y a pas les informations dans $_SESSION avant de faire un appel à la BD
    if (empty($_SESSION['accessRight'])) {
      Doo::loadModel('GlboAccessRight');
      Doo::loadModel('GlboModule');
      $accessRight_table = new GlboAccessRight();
      $accessRight_table->usr_id = $this->user;
      $result_accessRight = $this->db()->find($accessRight_table);
      foreach ($result_accessRight as $accessRight_tuple) {
        $module_table = new GlboModule();
        $module_table->mod_id = $accessRight_tuple->mod_id;
        $module_tuple = $this->db()->find($module_table, array('limit'=> 1));
        $menu_name = Doo::app()->getModule($module_tuple->mod_module, $module_tuple->mod_module.'_MainController', 'getMenu', "");
        //echo "-->".$menu_name;
        $this->access[$menu_name] = $module_tuple->mod_module.'/'.$module_tuple->mod_module.'_MainController/index';
        $module_table = null;
        $module_tuple = null;
      }
      //$this->access['Nom du Module'] = 'test/MainController/index';
      $_SESSION['accessRight'] = $this->access;
    }else{
      $this->access = $_SESSION['accessRight'];
      foreach ($this->access as $name=>$menu) {
        if ($menu == "frbMessage/frbMessage_MainController/index") {
          unset($this->access[$name]);
        }
      }
      $n = Doo::app()->getModule('frbMessage', 'frbMessage_MainController', 'getMenu', "");
      $this->access[$n] = 'frbMessage/frbMessage_MainController/index';
    }
  }
  /**
   *
   * Renvoie le tableau associatif des droits d'accès de l'utilisateur
   * @return Un tableau contenant nom module => URL URL avec le path relatif module/controller/method
   */
  public function getAccessRight() {
    return $this->access;

  }

  /**
   *
   * Renvoie le nom des modules (dossier dans module/) pour un utilisateur donné.
   * @return Array qui contient les noms des modules array('name1', 'name2', ...)
   */
  public function getAccessModule() {
    foreach ($this->access as $v) {
      $module = explode('/', $v);
      $tab[] = $module[0];
    }
    return $tab;
  }

  public function getNameOfModule($module_folder) {
    foreach ($this->access as $module_name => $v) {
      $module = explode('/', $v);
      $module = $module[0];
      if ($module == $module_folder)
      return $module_name;
    }
    return 'Nom Module Introuvable';
  }

  public function getURL($module_folder) {
    foreach ($this->access as $module_name => $v) {
      $module = explode('/', $v);
      $module = $module[0];
      if ($module == $module_folder)
      return $v;
    }
  }

}